home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 676-700 / 687 / xsb / prefs.c < prev    next >
C/C++ Source or Header  |  1995-03-18  |  3KB  |  122 lines

  1. #include "xsb.h"
  2. #include "startup.h"
  3.  
  4. extern struct Library *XSBBase;
  5. extern char xsbname[];
  6. static struct TextAttr top80={"topaz.font",8,0,0};
  7.  
  8. void doprefs(char *name)
  9. {
  10.     struct XSBParams *xp,*xpp;
  11.     struct Window *w;
  12.     struct Gadget *g=0,*lastg,*ga[10],*gp;
  13.     struct NewGadget ng;
  14.     int argcount=0;
  15.     int c,ypos=15;
  16.     struct IntuiMessage *im;
  17.     struct VisualInfo *vi=0;
  18.     long code,class;
  19.     int running=1;
  20.  
  21.     if(!(XSBBase=OldOpenLibrary(name))) {
  22.         doreq("XSBCX","Couldn't open blanker library\n%s","Cancel",name);
  23.         return;
  24.     }
  25.  
  26.     if(!(xp=XSBGetParams())) {
  27.         doreq(name,"This blanker don't\nhas preferences","Cancel");
  28.         CloseLibrary(XSBBase);
  29.         return;
  30.     }
  31.     xpp=xp;
  32.     while(xpp) { argcount++; xpp=xpp->next; }
  33.     xpp=xp;
  34.  
  35.     if(!(w=OpenWindowTags(0,WA_Top,30,WA_Left,120,
  36.         WA_Width,320,WA_Height,50+argcount*16,
  37.         WA_IDCMP,GADGETUP|GADGETDOWN|MOUSEMOVE|CLOSEWINDOW,
  38.         WA_AutoAdjust,TRUE,
  39.         WA_Title,name,
  40.         WA_Flags,ACTIVATE|RMBTRAP|WINDOWDRAG|WINDOWCLOSE|WINDOWDEPTH,
  41.         TAG_DONE))) goto xit;
  42.  
  43.     vi=GetVisualInfo(w->WScreen,TAG_DONE);
  44.     lastg=CreateContext(&g);
  45.  
  46.     ng.ng_LeftEdge=19; ng.ng_TopEdge=30+argcount*16;
  47.     ng.ng_Width=60; ng.ng_Height=13;
  48.     ng.ng_GadgetText="Save";
  49.     ng.ng_GadgetID=20;
  50.     ng.ng_TextAttr=&top80;
  51.     ng.ng_Flags=PLACETEXT_IN;
  52.     ng.ng_VisualInfo=vi;
  53.     lastg=CreateGadget(BUTTON_KIND,lastg,&ng,TAG_DONE);
  54.  
  55.     ng.ng_GadgetText="Load";
  56.     ng.ng_LeftEdge=92;
  57.     ng.ng_GadgetID++;
  58.     lastg=CreateGadget(BUTTON_KIND,lastg,&ng,TAG_DONE);
  59.  
  60.     ng.ng_GadgetText="Use";
  61.     ng.ng_LeftEdge=165;
  62.     ng.ng_GadgetID++;
  63.     lastg=CreateGadget(BUTTON_KIND,lastg,&ng,TAG_DONE);
  64.  
  65.     ng.ng_GadgetText="Cancel";
  66.     ng.ng_LeftEdge=240;
  67.     ng.ng_GadgetID++;
  68.     lastg=CreateGadget(BUTTON_KIND,lastg,&ng,TAG_DONE);
  69.     
  70.     c=0;
  71.     ng.ng_LeftEdge=100; ng.ng_Width=170; ng.ng_Height=14; ng.ng_GadgetID=1;
  72.     ng.ng_Flags=NG_HIGHLABEL|PLACETEXT_LEFT;
  73.     while(xpp) {
  74.         ng.ng_GadgetText=xpp->text;
  75.         ng.ng_TopEdge=ypos;
  76.         ypos+=16;
  77.         switch(xpp->type) {
  78.             case XSBP_BOOL: ng.ng_TopEdge++; lastg=CreateGadget(CHECKBOX_KIND,lastg,&ng,GTCB_Checked,xpp->value->xsb_arg,TAG_DONE); ng.ng_TopEdge--; break;
  79.             case XSBP_STRING: lastg=CreateGadget(STRING_KIND,lastg,&ng,GTST_MaxChars,40,GTST_String,xpp->value->xsb_string,TAG_DONE); break;
  80.             case XSBP_INTEGER: lastg=CreateGadget(INTEGER_KIND,lastg,&ng,GTIN_MaxChars,40,GTIN_Number,xpp->value->xsb_arg,TAG_DONE); break;
  81.             case XSBP_CYCLE: lastg=CreateGadget(CYCLE_KIND,lastg,&ng,GTCY_Labels,xpp->labels,GTCY_Active,xpp->value->xsb_arg,TAG_DONE); break;
  82.             case XSBP_SLIDER: lastg=CreateGadget(SLIDER_KIND,lastg,&ng,
  83.                 GTSL_Max,xpp->max,GTSL_Min,xpp->min,
  84.                 GTSL_Level,xpp->value->xsb_arg,
  85.                 PGA_Freedom,LORIENT_HORIZ,
  86.                 GTSL_MaxLevelLen,4,
  87.                 GTSL_LevelPlace,PLACETEXT_RIGHT,
  88.                 GA_RelVerify,TRUE,
  89.                 GTSL_LevelFormat,"%-4ld",TAG_DONE); break;
  90.         }
  91.         ga[c++]=lastg;
  92.         xpp=xpp->next;
  93.         ng.ng_GadgetID++;
  94.     }
  95.  
  96.     AddGList(w,g,-1,-1,0);
  97.     RefreshGList(g,w,0,-1);
  98.     GT_RefreshWindow(w,0);
  99.  
  100.     while(running) {
  101.         while(!(im=GT_GetIMsg(w->UserPort))) WaitPort(w->UserPort);
  102.         code=im->Code; class=im->Class;
  103.         gp=im->IAddress;
  104.         GT_ReplyIMsg(im);
  105.         if(class==CLOSEWINDOW) break;
  106.         if(class==GADGETUP) {
  107.             switch(gp->GadgetID) {
  108.                 case 20:
  109.                 case 21:
  110.                 case 22:
  111.                 case 23: running=0; break;
  112.             }
  113.         }
  114.     }
  115.  
  116. xit:
  117.     if(g) FreeGadgets(g);
  118.     if(vi) FreeVisualInfo(vi);
  119.     if(w) CloseWindow(w);
  120.     CloseLibrary(XSBBase);
  121. }
  122.